package com.syx.migration.utils;

import javax.xml.crypto.Data;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;

/**
 * @author Administrator
 * @date 2024/6/5 15:37
 * @description: 时间日期工具类
 */
public class DateTimeUtils {

    /**
     * 字符串转日期
     */
    public static Date str2Date(String value) throws ParseException {
        Date retVal = null;
        if(!(value == null || value.isEmpty())){
            if(isValidDateFormat(value, "yyyy-MM-dd HH:mm:ss")){
                retVal = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value);
            }else if(isValidDateFormat(value, "yyyy-MM-dd")){
                retVal = new SimpleDateFormat("yyyy-MM-dd").parse(value);
            } else if(isValidDateFormat(value, "MM/dd/yyyy HH:mm:ss")){
                retVal = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").parse(value);
            }  else if(isValidDateFormat(value, "MM/dd/yyyy")){
                retVal = new SimpleDateFormat("MM/dd/yyyy").parse(value);
            } else if(isValidDateFormat(value, "dd/MM/yyyy HH:mm:ss")){
                retVal = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(value);
            } else if(isValidDateFormat(value, "dd/MM/yyyy")){
                retVal = new SimpleDateFormat("dd/MM/yyyy").parse(value);
            } else if(isValidDateFormat(value, "dd/MM/yyyy HH:mm:ss")){
                retVal = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(value);
            } else if(isValidDateFormat(value, "dd/MM/yyyy")){
                retVal = new SimpleDateFormat("dd/MM/yyyy").parse(value);
            }
        }
        return retVal;
    }


    /**
     * 转义时间
     */
    public static String str2DateStr(String value){
        if (StringUtils.isBlank(value)){
            return value;
        }
        try {
            Date date = str2Date(value);
            if (Objects.isNull(date)){
                date = new Date();
            }
            return DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, date);
        } catch (ParseException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    /**
     * 校验格式
     */
    public static boolean isValidDateFormat(String dateString, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        // 设置严格模式，不允许解析不严格匹配的日期
        sdf.setLenient(false);
        try {
            sdf.parse(dateString);
            // 解析成功，返回true
            return true;
        } catch (ParseException e) {
            // 解析异常，返回false
            return false;
        }
    }

}
